package Leetcode.每日一题;

import java.util.Stack;

/**
 * @Author kirito
 * @Date 2024/1/9 10:35
 * @PackageName:Leetcode.每日一题
 * @ClassName: 有效的括号
 * @Description:
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
 *
 * 有效字符串需满足：
 *
 * 左括号必须用相同类型的右括号闭合。
 * 左括号必须以正确的顺序闭合。
 * 每个右括号都有一个对应的相同类型的左括号。
 *
 *
 * 示例 1：
 *
 * 输入：s = "()"
 * 输出：true
 * 示例 2：
 *
 * 输入：s = "()[]{}"
 * 输出：true
 * 示例 3：
 *
 * 输入：s = "(]"
 * 输出：false
 *
 *
 * 提示：
 *
 * 1 <= s.length <= 104
 * s 仅由括号 '()[]{}' 组成
 * @Version 1.0
 */
public class 有效的括号 {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        char[] charArray = s.toCharArray();

        for (char ch : charArray) {
            //如果是左括号则直接入栈
            if (ch == '(' || ch == '{' || ch == '[') {
                stack.push(ch);
            } else {
                //如果是右括号，并且此时栈不为空
                if (!stack.isEmpty()) {
                    if (ch == ')') {
                        if (stack.pop() != '(') {
                            return false;
                        }
                    } else if (ch == '}') {
                        if (stack.pop() != '{') {
                            return false;
                        }
                    } else {
                        if (stack.pop() != '[') {
                            return false;
                        }
                    }
                }else{ //此时栈为空，但却来了个右括号，也直接返回false
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        String s = "FBA17MP5PH8G FBA17MNYLDVM FBA17MNPKG4L FBA17MP1XPKJ";
        String s1 = "FBA17MP5PH8G FBA17MNYLDVM FBA17MNPKG4L FBA17MP1XPKJ";
        System.out.println(s.length());
        System.out.println(s.toLowerCase().contains(s1.toLowerCase()));
    }
}
